草庐IT

C++ : friend function in a template class for operator<<

全部标签

c++ - <eof> 附近的 lua 函数参数

我尝试在C++项目中使用lua。对于lua执行,我这样写:#include...luaEngine=luaL_newstate();luaL_openlibs(luaEngine);register_results(luaEngine);//Forregisterc++objectintheLUAscriptasmetatablelua_pushstring(luaEngine,resultsId.c_str());lua_setglobal(luaEngine,"resultsId");lua_pushboolean(luaEngine,needReloadModel);lua_se

python - swig:如何使 QList<T> 可迭代,如 std::vector

我正在使用SWIG为我的qt应用生成Python绑定(bind)。我有几个地方使用QLists,我想集成SWIG库中的std::vector之类的QList(参见http://www.swig.org/Doc1.3/Library.html#Library_nn15)。这意味着:QList对象应该是可从python迭代的(=它们必须是可迭代的python对象)应该可以将python列表传递给采用qlist的函数...以及std::vector的SWIG库中列出的所有其他功能为此,我使用以下代码:https://github.com/osmandapp/OsmAnd-core/blob/

c++ - 使用 atomic<bool> 的简单自旋锁中的数据竞争

这个问题在这里已经有了答案:C++11ImplementationofSpinlockusingheader``(2个答案)关闭7年前。#include#include#include#include#include#includeusingnamespacestd;classspinlock{private:atomicflag;public:spinlock():flag(false){}voidlock(){booltemp=false;while(!flag.compare_exchange_weak(temp,true,std::memory_order_seq_cst)&&

c++ - 如何从 std::array<T, N>::pointer 成员/依赖类型中推断出数组大小?

我的目标是为strcpy编写安全的替代品对于在编译期间已知目标缓冲区大小的情况,我希望推断出缓冲区大小,因此用户不需要知道它。例如:charxs[2]={0};strcpy(xs,"abc");//bufferoverflow!printf("[%s]\n",xs);此输出(希望)是:[abc]对于简单的情况,当传递C风格的数组时,可以毫不费力地写成:templatechar*safe_strcpy(char(&dst)[N],constchar*src)noexcept{std::snprintf(dst,N,"%s",src);return&dst[0];}推导出数组的大小,snp

c++ - 防止 "Float-point invalid operation"异常?

我正在使用VisualC++将二进制数据加载到float中,如下所示:doubledValue;memcpy(&dValue,lpData,sizeof(dValue));对于正常情况,这将正常工作。然而,在极少数情况下,当二进制数据损坏时,dValue将无效,对其进行任何进一步操作将导致“浮点无效操作”异常。我在调试器中检查了dValue,它显示为-1.#QNAN00000000000。为了防止异常,我需要在从二进制数据加载后验证dValue。我尝试使用:if(_finite(dValue)){…dosometasks…}但是无效的dValue仍然会导致_finite函数引发Floa

c++ - 比较 observer_ptr< T > 和 T *

据我所知,observer_ptr提议包括与nullptr_t的(不)平等比较和交叉类型(即observer_ptr与observer_ptr)比较。没有与原始指针的比较,这在尝试将其逐渐引入现有代码库时有点烦人。问题1:如果我添加这些运算符,您是否预见到任何严重的问题(我在不同的命名空间中使用observer_ptr的单独实现,完全按照当前提案建模,我不会将这些添加到std::observer_ptr)?跟进:如果添加运算符不是一个好主意,那么在observer_ptr上使用get()会更好吗?与原始指针进行比较,还是将原始指针显式包装为observer_ptr会更好??编辑:显然不

c++ - atomic<bool> 与受互斥锁保护的 bool

假设我们有一个内存区域,某个线程正在向其中写入数据。然后它将注意力转移到别处并允许任意其他线程读取数据。然而,在某个时间点,它想要重用该内存区域并再次写入。写入器线程提供了一个bool标志(valid),它表示内存仍然有效,可以从中读取(即他还没有重新使用它)。在某个时候,他会将此标志设置为false,并且再也不会将其设置为true(它只会翻转一次,就是这样)。在顺序一致性的情况下,编写者和读者分别使用这两个代码片段应该是正确的:...valid=false;...和...if(valid){}else{}...我们显然需要做一些事情来确保顺序一致性,即插入必要的获取和释放内存屏障。我

c++ - 一个 std::shared_ptr<> 的 std::tuple<> 不起作用?

我最近发现使用std::tuple有问题只有一个元素。我创建了一个用于类型删除并保留N个引用计数对象的类。但是,如果引用计数对象是std::tuple中唯一的一个,则不会保留它。.我做错了什么吗?classtoken{public:templatetoken(Types...types):_self(std::make_shared>(std::make_tuple(std::move(types)...))){}//WhydoIneedthisspecialversionoftheconstructor?//Uncommentandthecodewillwork!//template

C++。为什么 std::cout << char + int 打印 int 值?

比方说,我们有:charx='a';inty=1;所以,如果你运行:std::cout它打印98而不是'b'。正如我从here看到的那样只有int参数实现。从现在开始我有两个问题:char+int操作后返回什么类型?为什么没有char参数实现,而是std::cout仍然按预期工作并打印char值? 最佳答案 感谢Fefux,BoPersson和MattiVirkkunen答案是:来自CPPReference:Implicitconversions:arithmeticoperatorsdonotaccepttypessmallert

c++ - std::shared_ptr<std::string const> 能否作为引用计数不可变字符串的有效实现?

理想情况下,不可变字符串类只需要为每个字符串分配一个内存。甚至引用计数也可以存储在与字符串本身相同的内存块中。string的简单实现和shared_ptr将为shared_ptr分配三block不同的内存:字符串缓冲区的内存字符串对象的内存引用计数的内存现在,我知道在使用std::make_shared()时,智能实现可以将最后两个组合成一个分配。但这仍然会留下两个分配。当您知道字符串是不可变的时,字符串缓冲区将不会被重新分配,因此应该可以将它与字符串对象集成在一起,只留下一次分配。我知道一些字符串实现已经对短字符串使用了这样的优化,但我正在寻找一个不管字符串长度如何都这样做的实现。我